
const jwt = require('jsonwebtoken')
const bcrypt = require('bcryptjs')
const config = require('../../config')
const db =require('../../db')

/**
 * POST 登录的回调函数
 * @param userName  用户名
 * @param password  用户密码
 */
exports.login = (req, res) => {
  // 接收表单的数据
  const userInfo = req.body
  // 定义 SQL 语句
  const sql = 'select * from account_user where userName=?'
  // 执行 SQL 语句，根据用户名查询用户的信息
  db.query(sql, userInfo.userName, (err, result) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // 执行 SQL 语句成功,但是获取的数据条数不为1 也是失败的
    if (result.length !== 1) return res.cc('登录失败！')
    // 经过上方俩条判断条件，则证明执行 SQL 成功
    console.log('result', result);
    // TODO ：判断密码是否正确
    const comRes = bcrypt.compareSync(userInfo.password, result[0].password)
    if (!comRes) return res.cc('登陆失败')
    // 在服务器端生成 Token 字符串
    const user = {
      ...result[0], // 解构用户信息
      password: '', //密码等敏感信息置空
    }
    // 对用户的信息进行加密，生成 token 字符串
    const tokenStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: config.expiresIn //tonken 有效期
    })
    // 调用 res.send 将Token响应给客户端
    res.send({
      success: true,
      data: {
        user: user,
        token: 'Bearer ' + tokenStr,
      },
      message: '登录成功！！！',
    })
  })
}
